home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / periodic / periodic.c < prev    next >
C/C++ Source or Header  |  1995-05-26  |  10KB  |  386 lines

  1. #ifdef REV_INFO
  2. #ifndef lint
  3. static char SCCSID[] = "OSF/Motif: @(#)periodic.c    1.13 90/08/09";
  4. #endif /* lint */
  5. #endif /* REV_INFO */
  6. /******************************************************************************
  7. *******************************************************************************
  8. *
  9. *  (c) Copyright 1989, 1990, 1991 OPEN SOFTWARE FOUNDATION, INC.
  10. *  ALL RIGHTS RESERVED
  11. *  
  12. *      THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
  13. *  NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY OPEN SOFTWARE
  14. *  FOUNDATION, INC. OR ITS THIRD PARTY SUPPLIERS  
  15. *  
  16. *      OPEN SOFTWARE FOUNDATION, INC. AND ITS THIRD PARTY SUPPLIERS,
  17. *  ASSUME NO RESPONSIBILITY FOR THE USE OR INABILITY TO USE ANY OF ITS
  18. *  SOFTWARE .   OSF SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  19. *  KIND, AND OSF EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES, INCLUDING
  20. *  BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  21. *  FITNESS FOR A PARTICULAR PURPOSE.
  22. *  
  23. * Open Software Foundation is a trademark of The Open Software Foundation, Inc.
  24. * OSF is a trademark of Open Software Foundation, Inc.
  25. * OSF/Motif is a trademark of Open Software Foundation, Inc.
  26. * Motif is a trademark of Open Software Foundation, Inc.
  27. * DEC is a registered trademark of Digital Equipment Corporation
  28. * DIGITAL is a registered trademark of Digital Equipment Corporation
  29. * X Window System is a trademark of the Massachusetts Institute of Technology
  30. *
  31. *******************************************************************************
  32. ******************************************************************************/
  33.  
  34. /******************************************************************************
  35. ***    defaults:    periodic.c depends on these defaults:
  36. !
  37. periodic*highlightThickness:        1
  38. #ifdef COLOR
  39. periodic*background:            LightGray
  40. #endif
  41. !
  42. ***
  43. ******************************************************************************/
  44.  
  45. #include <stdio.h>
  46.  
  47. #include <Xm/Xm.h>                        /* Motif Toolkit */
  48. #include <Xm/Label.h>
  49. #include <Xm/LabelG.h>
  50. #include <Xm/PushB.h>
  51. #include <Xm/PushBG.h>
  52. #include <Xm/ToggleB.h>
  53. #include <Xm/ToggleBG.h>
  54. #include <Xm/RowColumn.h>
  55. #include <Xm/SeparatoG.h>
  56. #include <Xm/Separator.h>
  57. #include <Mrm/MrmPublic.h>                   /* Mrm Toolkit */
  58.  
  59. #define MAX_ARGS  100
  60.  
  61. #define K_scale_widget           1
  62. #define K_drawnbutton_widget     2
  63. #define K_togglebutton_widget    3
  64. #define K_vtext1_widget          4
  65. #define K_vtext2_widget          5
  66. #define K_popup_menu_widget      6
  67.  
  68. static Widget Scale_1,Drawnbutton_1,Togglebutton_1,VText_1,VText_2,PopMenu_1,PMenu_1;
  69. static Widget Label1, Separator1, PushBtn1, ToggleBtn1;
  70.  
  71. static MrmHierarchy    s_MrmHierarchy;        /* MRM database hierarch id */
  72. static char        *vec[]={"periodic.uid"};
  73.                         /* MRM database file list   */
  74. static MrmCode        class ;
  75.  
  76. static void quit_button_activate();
  77. static void foo_activate();
  78. static void create_callback();
  79. static void zippy_null();
  80. static void postmenu ();
  81.  
  82. static MrmCount        regnum = 4 ;
  83. static MrmRegisterArg    regvec[] = {
  84.     {"quit_button_activate",(caddr_t)quit_button_activate},
  85.     {"foo_activate",(caddr_t)foo_activate},
  86.     {"create_callback",(caddr_t)create_callback},
  87.     {"zippy_null",(caddr_t)zippy_null}
  88.     };
  89.  
  90. static Widget  CreateLabel(label, parent)
  91.     char   *label;
  92.     Widget  parent;
  93. {
  94.     Widget        widget;
  95.     register int  n;
  96.     Arg           args[MAX_ARGS];
  97.     XmString      tcs;
  98.  
  99.  
  100.     n = 0;
  101.     tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
  102.     XtSetArg(args[n], XmNlabelString, tcs);  n++;
  103.     widget = XmCreateLabel(parent, "label", args, n);
  104.     XtManageChild(widget);
  105.     XmStringFree(tcs);
  106.  
  107.     return(widget);
  108. }
  109.  
  110.  
  111. static Widget  CreatePushButton(label, parent)
  112.     char   *label;
  113.     Widget  parent;
  114. {
  115.     Widget        widget;
  116.     register int  n;
  117.     Arg           args[MAX_ARGS];
  118.     XmString      tcs;
  119.  
  120.  
  121.     n = 0;
  122.     tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
  123.     XtSetArg(args[n], XmNlabelString, tcs);  n++;
  124.     widget = XmCreatePushButton(parent, "pushButton", args, n);
  125.     XtManageChild(widget);
  126.     XmStringFree(tcs);
  127.  
  128.     return(widget);
  129. }
  130.  
  131. static Widget  CreateToggle(label, parent)
  132.     char   *label;
  133.     Widget  parent;
  134. {
  135.     Widget        widget;
  136.     register int  n;
  137.     Arg           args[MAX_ARGS];
  138.     XmString      tcs;
  139.  
  140.  
  141.     n = 0;
  142.     tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
  143.     XtSetArg(args[n], XmNlabelString, tcs);  n++;
  144.     widget = XmCreateToggleButton(parent, "toggle", args, n);
  145.     XtManageChild(widget);
  146.     XmStringFree(tcs);
  147.  
  148.     return(widget);
  149. }
  150.  
  151. XtAppContext    app_context;
  152. Display*    display;
  153.  
  154. /*
  155.  *  Main program
  156.  */
  157. int main(argc, argv)
  158. unsigned int argc;
  159. char **argv;
  160. {
  161.      /*
  162.      *  Declare the variables to contain the two widget ids
  163.      */
  164.     Widget toplevel, periodic_table_main;
  165.     Arg arglist[1] ;
  166.     int         status;
  167.  
  168.     /*
  169.      *  Initialize the MRM
  170.      */
  171.  
  172.     MrmInitialize ();
  173.  
  174.     /*
  175.      *  Initialize the toolkit.  This call returns the id of the "toplevel"
  176.      *  widget.  The applications "main" widget must be the only child
  177.      *  of this widget.
  178.      */
  179.  
  180.     XtToolkitInitialize();
  181.     app_context = XtCreateApplicationContext();
  182.     display = XtOpenDisplay(app_context, NULL,
  183.     "periodic",            /* application name */
  184.     "periodic",              /* application class */
  185.     NULL, 0,                /* options */
  186.     &argc, argv);           /* command line parameters */
  187.     if (!display) { printf("Unable to open display\n"); exit(0); }
  188.  
  189.  
  190.     XtSetArg (arglist[0], XtNallowShellResize, FALSE) ;
  191.     toplevel = XtAppCreateShell("periodic", NULL,
  192.             applicationShellWidgetClass,
  193.             display, arglist, 1);
  194.  
  195.     /*
  196.      *  Define the Mrm.hierarchy (only 1 file)
  197.      */
  198.  
  199.     if (MrmOpenHierarchy (1,                /* number of files        */
  200.             vec,                 /* files             */
  201.             NULL,                /* os_ext_list (null)   */
  202.             &s_MrmHierarchy)        /* ptr to returned id   */
  203.             != MrmSUCCESS) {
  204.     printf ("can't open hierarchy\n");
  205.      }
  206.  
  207.     /*
  208.      *     Register our callback routines so that the resource manager can 
  209.      *     resolve them at widget-creation time.
  210.      */
  211.  
  212.     if (MrmRegisterNames (regvec, regnum)
  213.             != MrmSUCCESS)
  214.                 printf("can't register names\n");
  215.  
  216.     /*
  217.      *  Call MRM to fetch and create the pushbutton and its container
  218.      */
  219.  
  220.     if (MrmFetchWidget (s_MrmHierarchy,
  221.             "periodic_table_main",
  222.             toplevel,
  223.             &periodic_table_main,
  224.             &class)
  225.             != MrmSUCCESS)
  226.                 printf("can't fetch interface\n");
  227.  
  228.     /*
  229.      *  Make the toplevel widget "manage" the main window (or whatever the
  230.      *  the uil defines as the topmost widget).  This will
  231.      *  cause it to be "realized" when the toplevel widget is "realized"
  232.      */
  233.  
  234.     XtManageChild(periodic_table_main);
  235.     
  236.     /*
  237.      *  Realize the toplevel widget.  This will cause the entire "managed"
  238.      *  widget hierarchy to be displayed
  239.      */
  240.  
  241.     XtRealizeWidget(toplevel);
  242.  
  243.     /*
  244.     **  PopupMenu1
  245.     */
  246.     PMenu_1 = XmCreatePopupMenu(PopMenu_1, "popMenu", NULL, 0);
  247.     XtAddEventHandler(PopMenu_1, ButtonPressMask, False, postmenu, PMenu_1);
  248.  
  249.     /*
  250.     **  Menu1
  251.     */
  252.     Label1       = CreateLabel("POPUP MENU", PMenu_1);
  253.  
  254.     XtSetArg(arglist[0], XmNseparatorType, XmDOUBLE_LINE);
  255.     Separator1   = XmCreateSeparator(PMenu_1, "separator", arglist, 1);
  256.  
  257.     PushBtn1     = CreatePushButton("pushbutton", PMenu_1);
  258.  
  259.     ToggleBtn1   = CreateToggle("togglebutton", PMenu_1);
  260.  
  261.  
  262.     /*
  263.      *  Loop and process events
  264.      */
  265.  
  266.     XtAppMainLoop(app_context);
  267.  
  268.     /* UNREACHABLE */
  269.     return (0);
  270. }
  271.  
  272. static void zippy_null( widget, tag, callback_data )
  273.     Widget    widget;
  274.     char    *tag;
  275.     XmAnyCallbackStruct *callback_data;
  276. {
  277. }
  278.  
  279. #define fatal 1
  280. static void  postmenu (w, popup, event)
  281.     Widget         w;
  282.     Widget         popup;
  283.     XButtonEvent  *event;
  284. {
  285.     int         status;
  286.     if (event->button != Button3)
  287.         return;
  288.  
  289.     XmMenuPosition(PMenu_1, event);
  290.     XtManageChild (PMenu_1);
  291. }
  292.  
  293. /*
  294.  * All widgets that are created call back to this procedure.
  295.  */
  296.  
  297. static void create_callback(w, tag, reason)
  298.     Widget w;
  299.     int *tag;
  300.     unsigned long *reason;
  301. {
  302.  
  303.     /*  For internationalization ease, we capture a few strings from the
  304.      *  widgets themselves.  We could go out and fetch them as needed but
  305.      *  since we use these all the time, this method if more efficient.
  306.      */
  307.     switch (*tag) {
  308.         case K_scale_widget: 
  309.         Scale_1 = w;
  310.             break;
  311.         case K_drawnbutton_widget: 
  312.         Drawnbutton_1 = w;
  313.             break;
  314.         case K_togglebutton_widget: 
  315.         Togglebutton_1 = w;
  316.             break;
  317.         case K_vtext1_widget: 
  318.         VText_1 = w;
  319.             break;
  320.         case K_vtext2_widget: 
  321.         VText_2 = w;
  322.             break;
  323.         case K_popup_menu_widget: 
  324.         PopMenu_1 = w;
  325.             break;
  326.         default: 
  327.             break;
  328.     }
  329. }
  330.  
  331. static void foo_activate( widget, tag, callback_data )
  332.     Widget    widget;
  333.     char    *tag;
  334.     XmAnyCallbackStruct *callback_data;
  335. {
  336.     Arg arglist[2];
  337.     int scale_value;
  338.     Boolean toggle_state;
  339.  
  340.     XtSetArg( arglist[0], XmNvalue, &scale_value);
  341.     XtGetValues( Scale_1, arglist, 1 );
  342.     XtSetArg( arglist[0], XmNset, &toggle_state);
  343.     XtGetValues( Togglebutton_1, arglist, 1 );
  344.  
  345.     if ((scale_value == 13) && (toggle_state == True)) {
  346.     XtSetArg( arglist[0], XmNvalue,
  347. "OSF Motif Credits");
  348.     XtSetValues( VText_1, arglist, 1 );
  349.     XtSetArg( arglist[0], XmNvalue,
  350. "DEV: Vania, Ellis, Mike,\n\
  351. ..Alka, Al, Scott,\n\
  352. ..Daniel, and Paul\n\
  353. REL: Ron and Martha\n\
  354. Q/A: Libby, Tom, Ken,\n\
  355. ..Carl, and Dany\n\
  356. DOC: Ken and Bob\n\
  357. Moral Support:\n\
  358. Mary Chung's Restaurant\n");
  359.     XtSetValues( VText_2, arglist, 1 );
  360.     }
  361.  
  362. }
  363.  
  364. static void quit_button_activate( widget, tag, callback_data )
  365.     Widget    widget;
  366.     char    *tag;
  367.     XmAnyCallbackStruct *callback_data;
  368. {
  369.     Arg arglist[2];
  370.  
  371.     static int call_count = 1;
  372.  
  373.     call_count += 1 ;
  374.     switch ( call_count )
  375.         {
  376.         case 1:
  377. /*            XtSetArg( arglist[0], XmNlabelString,
  378.                 XmStringLtoRCreate("Goodbye\nWorld!",""));
  379.         XtSetValues( Text_1, arglist, 1 );          */
  380.             break ;
  381.         case 2:
  382.             exit(1);
  383.             break ;
  384.         }
  385. }
  386.